package com.example.gateway.properties;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "jwt")
public class JwtProperties {
    private String secretKey;       // 密钥
    private String expirationTime;  // 过期时间（带单位）
    private String issuer;          // 签发者
    private String audience;       // 受众

    /**
     * 将带单位的时间字符串转换为毫秒
     */
    public long getExpirationTimeInMillis() {
        if (expirationTime == null || expirationTime.isEmpty()) {
            throw new IllegalArgumentException("Expiration time must not be empty");
        }

        // 获取单位后缀
        char unit = expirationTime.charAt(expirationTime.length() - 1);
        // 获取数值部分
        long value = Long.parseLong(expirationTime.substring(0, expirationTime.length() - 1));

        // 根据单位转换为毫秒
        return switch (unit) {
            case 's' -> // 秒
                    value * 1000;
            case 'm' -> // 分钟
                    value * 60 * 1000;
            case 'h' -> // 小时
                    value * 60 * 60 * 1000;
            case 'd' -> // 天
                    value * 24 * 60 * 60 * 1000;
            default -> throw new IllegalArgumentException("Invalid time unit: " + unit);
        };
    }
}